package com.gyyweishang.controller;

import com.gyyweishang.anno.Logger;
import com.gyyweishang.pojo.Dept;
import com.gyyweishang.pojo.Result;
import com.gyyweishang.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RequestMapping("/depts") //公共请求路径,同一个路径下的请求方法
@RestController
public class DeptController {

//    private static final Logger log = LoggerFactory.getLogger(DeptController.class);

    @Autowired
    private DeptService deptService;

    @Logger
    @GetMapping//限定get请求
    public Result list() {
//        System.out.println("查询所有的部门信息");
        log.info("查询所有的部门信息");
        List<Dept> deptList = deptService.findAll();
        return Result.success(deptList);
    }
//    简单参数接收方式
//    方式一：通过原始的HttpServletRequest对象法获取参数
//    @DeleteMapping("/depts")
//    public Result delete(HttpServletRequest request) {
//        String idStr = request.getParameter("id");//此id为前端传进来的id
//        int deptId = Integer.parseInt(idStr);
//        deptService.delete(deptId);
//        return Result.success();
//    }

//    方式二：通过@RequestParam 注解进行参数绑定,参数必须传递，不传递会报错,，默认为required=true
//    @DeleteMapping("/depts")
//   public Result delete(@RequestParam(value = "id", required = false) Integer deptId) {
//        deptService.delete(deptId);
//        return Result.success();
//   }

    //    方式三：保证请求参数名与形参变量名相同，直接接收（推荐）
    @Logger
    @DeleteMapping
    public Result delete(Integer id) {
        log.info("删除的部门id：{}" , id);
        deptService.deleteById(id);
        return Result.success();
    }
    @Logger
    @PostMapping
    public Result add(@RequestBody Dept dept) {
        log.info("新增的部门信息：{}" , dept);
        deptService.add(dept);
        return Result.success();
    }
    @Logger
    @GetMapping("/{id}")//路径变量 路径参数
    public Result getInfo(@PathVariable("id") Integer id) {
        //如果是多个参数,路径参数名与形参名一致，直接接收即可
        //@GetMapping("/depts/{id}/{name}")/
        //@PathVariable Integer id,@PathVariable String name
//        System.out.println("根据部门id查询：" + id);
        log.info("根据部门id查询：{}" , id);
        Dept dept = deptService.getInfo(id);
        return Result.success(dept);
    }
    @Logger
    @PutMapping//修改
    public Result update(@RequestBody Dept dept) {
//        System.out.println("修改的部门信息：" + dept);
        log.info("修改的部门信息：{}" , dept);
        deptService.update(dept);
        return Result.success();
    }
    @Logger
    //测试使用
    @RequestMapping("/test")
    public String test() {
        return "test111111111111111111";
    }


}
